package com.xxx.gateway.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;


@Configuration
public class GatewayCorsConfiguration {


    @Bean
    public CorsWebFilter corsWebFilter() throws InstantiationException, IllegalAccessException, ClassNotFoundException {

        //通过反射创建对象
        Class<?> clazz = Class.forName("org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource");

        UrlBasedCorsConfigurationSource source = (UrlBasedCorsConfigurationSource) clazz.newInstance();

        clazz = Class.forName("org.springframework.web.cors.CorsConfiguration");

        CorsConfiguration corsConfiguration = (CorsConfiguration) clazz.newInstance();

        //直接new耦合度高
        //   UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        //  CorsConfiguration corsConfiguration = new CorsConfiguration();

        //配置跨域
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.setAllowCredentials(true);

        source.registerCorsConfiguration("/**",corsConfiguration);

        return new CorsWebFilter(source);


    }

    @Bean
    public JwtCheckGatewayFilterFactory jwtCheckGatewayFilterFactory(){
        return new JwtCheckGatewayFilterFactory();
    }

}
